package com.example.hxds.common.config.xss;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;


/**
 * 什么是xss攻击：
 * XSS（跨站脚本攻击）是一种常见的网络攻击手段。攻击者通过在网页中插入恶意的脚本代码，当其他用户浏览这个网页时，这些恶意脚本代码会被执行，从而达到攻击的目的。这种攻击方式可以用来窃取用户的敏感信息，如密码、信用卡号等，或者进行其他恶意操作。
   XSS攻击主要有三种类型：
   1. 存储型XSS攻击：攻击者将恶意脚本提交到网站的数据库中，当其他用户访问这个网站时，网站从数据库中获取并显示这个恶意脚本，导致攻击。
   2. 反射型XSS攻击：攻击者将恶意脚本放在URL中，当其他用户点击这个URL时，网站会将恶意脚本返回给用户，导致攻击。
   3. DOM型XSS攻击：攻击者通过修改网页的DOM结构，插入恶意脚本，当用户浏览网页时，恶意脚本被执行，导致攻击。
 */
@WebFilter(urlPatterns = "/*")
public class XssFilter implements Filter {

    /**
     * 过滤器启动时执行一次的初始化操作，例如加载资源、设置参数等。
     */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        /**
         * XssFilter类是一个过滤器，用于防止XSS攻击。它通过doFilter方法对用户的请求进行处理，
         * 将用户的请求包装在XssHttpServletRequestWrapper中，这个包装类可以对用户的输入进行清理，
         * 防止包含恶意脚本的输入被提交。
         */
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        XssHttpServletRequestWrapper wrapper = new XssHttpServletRequestWrapper(request);
        filterChain.doFilter(wrapper, servletResponse);
    }

    /**
     * 它在过滤器的生命周期结束时被调用。这个方法只会被调用一次，通常用于释放过滤器占用的资源。
     */
    @Override
    public void destroy() {
         // 在这里执行清理操作
         System.out.println("XssFilter已销毁");
    }
}